package com.example.demo.msg.tio.client;

import com.example.demo.msg.tio.HelloPacket;
import com.example.demo.msg.tio.utils.TioContents;
import org.tio.client.TioClient;
import org.tio.client.ClientChannelContext;
import org.tio.client.ClientGroupContext;
import org.tio.client.ReconnConf;
import org.tio.client.intf.ClientAioHandler;
import org.tio.client.intf.ClientAioListener;
import org.tio.core.Tio;
import org.tio.core.Node;

public class HelloClientStart {

    //服务器节点
    public static Node serverNode = new Node(TioContents.SERVER, TioContents.PORT);
    //handler, 包括编码、解码、消息处理
    public static ClientAioHandler aioClientHandler = new HelloClientAioHandler();
    //事件监听器，可以为 null，但建议自己实现该接口，可以参考 showcase 了解些接口
    public static ClientAioListener aioListener = null;
    //断链后自动连接的，不想自动连接请设为 null
    private static ReconnConf reconnConf = new ReconnConf(5000L);

    //一组连接共用的上下文对象
    public static ClientGroupContext clientGroupContext = new ClientGroupContext(aioClientHandler,
            aioListener, reconnConf);
    public static TioClient aioClient = null;
    public static ClientChannelContext clientChannelContext = null;

    /**
     * 启动程序入口
     */
    public static void main(String[] args) throws Exception {
        clientGroupContext.setHeartbeatTimeout(TioContents.TIMEOUT);
        aioClient = new TioClient(clientGroupContext);
        clientChannelContext = aioClient.connect(serverNode);
//连上后，发条消息玩玩
        send();
    }


    private static void send() throws Exception {
        HelloPacket packet = new HelloPacket();
        packet.setBody("hello world".getBytes(HelloPacket.CHARSET));
        Tio.send(clientChannelContext, packet);
    }
}